package 剑指offer;

public class _15二进制中1的个数 {
	 public static void main(String[] args) {
		System.out.println(hammingWeight2(64));
	}
		/**
		 * 
		 *@time 2021年1月4日下午7:40:55
		 * 
		 *@param n
		 *@return int
		 *
		 *@see
		 *若 n&1=0  ，则 n二进制 最右一位 为 0 ；
		 *若n&1=1  ， 则n二进制最右一位为 1；
		 */
		public static int hammingWeight1(int n) {
		       int res=0;
		       while(n!=0) {
		    	   res+=n&1;
		    	   n>>>=1;
		       }
		       return res;
		  }
		/**
		 * 
		 *@time 2021年1月4日下午7:47:23
		 * 
		 *@param n
		 *@return int
		 *
		 *@see
		 *若n&n-1可以消灭最右边的1
		 */
		public static int hammingWeight2(int n) {
			int res=0;
			while(n!=0) {
				res++;
				n&=(n-1);
			}
			return res;
		}
}
